//
//  HRHomeTableViewController.swift
//  weiBo
//
//  Created by helong on 16/7/9.
//  Copyright © 2016年 helong. All rights reserved.
//

import UIKit
import SVProgressHUD
private let HomePageCellIdentifier: String = "HomePageCellIdentifier"

class HRHomeTableViewController: HRMainTableViewController {

    //  懒加载菊花转
    let activityIndicator: UIActivityIndicatorView = {
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
//        indicator.color = UIColor.redColor()
        return indicator
    }()
    
    //  懒加载自定义下拉刷新控件
    lazy var pullDownRefresh: HRRefreshControl = {
        let refresh = HRRefreshControl()
//        refresh.backgroundColor = randomColor()
        printLog()
        //  添加监听事件
        refresh.addTarget(self, action: "pullDownLoadData", forControlEvents: .ValueChanged)
        
        return refresh
    }()
    //  懒加载tips图标
    private lazy var tipLabel: UILabel = {
        let tip = UILabel(textColor: UIColor.whiteColor(), fontSize: 15)
        tip.backgroundColor = UIColor.orangeColor()
        tip.textAlignment = .Center
        tip.text = "加载了数据..."
        //  开始的时候隐藏
        tip.hidden = true
        return tip
    }()
    /*  系统下拉刷新打开它
    //  懒加载下拉刷新控件
    lazy var refreshControlView: UIRefreshControl = UIRefreshControl()
*/
    
    //  持有modelView,然后可以获取数据
    var homePage: HRHomePage = HRHomePage()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        if self.isLogin{//已经登录
           super.viewDidLoad()

            setupTableVie()//   设置tableView
            
            loadData()//    获取数据,刷新UI
           
            setupTipUI()//  设置tipsview
            //
        }else{//没有登录
            visitorView?.setUI(nil, imageName: nil)
            
        }
    }
     // MARK: - 下拉刷新的事件:注意加@objc
   @objc private func pullDownLoadData(){
    
        loadData()

    }
     // MARK: - 设置tableView
    private func setupTableVie(){
        //  注册cell
        tableView.registerClass(HRHomePageTableViewCell.self, forCellReuseIdentifier: HomePageCellIdentifier)
        //  去掉tableView的分割线
        tableView.separatorStyle = .None
        //  设置tableView的高
        tableView.rowHeight = UITableViewAutomaticDimension
        tableView.estimatedRowHeight = 200
        // 设置footer
        tableView.tableFooterView = activityIndicator
        
        tableView.addSubview(pullDownRefresh)
//        
//        pullDownRefresh.snp_makeConstraints { (make) -> Void in
//            make.leading.equalTo(tableView)
//            make.trailing.equalTo(tableView)
//            make.top.equalTo(tableView)
//            make.height.equalTo(100)
//        }
        /*  系统下拉刷新打开它
        //  设置下拉刷新控件
        self.refreshControl = refreshControlView
        //  为下拉刷新添加监听
        refreshControlView.addTarget(self, action: "pullDownRefresh", forControlEvents: .ValueChanged)
*/
    }
     // MARK: - 设置tips的UI
    private func setupTipUI(){
        guard let nav = self.navigationController else {
            return
        }
        //  添加tips到导航栏的navigationBar的下面
        nav.view.insertSubview(tipLabel, belowSubview: (nav.navigationBar))
        //  设置frame
        tipLabel.frame = CGRect(x: 0, y: 64-40 , width: (nav.navigationBar.width), height: 40)
        print(tipLabel.frame)
    }
    
     // MARK: - 下拉刷新的事件
    /*  系统下拉刷新打开它
    @objc private func pullDownRefresh(){
        loadData()
        //  数据加载完毕停止刷新
        refreshControlView.endRefreshing()
    }
*/
    
     // MARK: - 结束下拉刷xin
    private func endRefresh(){
//        refreshControlView.endRefreshing
        //  结束上拉加载动画
        self.activityIndicator.stopAnimating()
        //  结束下拉刷新动画
        self.pullDownRefresh.endRefreshing()
    }
     // MARK: - 
    private func tipsAnimation(message: String){
        //  通过判断tipLabel是否隐藏来决定是否开启动画,如果动画还在继续就不要再开启了
        if tipLabel.hidden == false {
            return
        }
        //  请求数据完成之后 开启tips动画,并显示刷新的微博的条数
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.tipLabel.text = message
            self.tipLabel.hidden = false
            self.tipLabel.frame.origin.y = 64
            }, completion: { (_) -> Void in
                UIView.animateWithDuration(1, animations: { () -> Void in
                    self.tipLabel.frame.origin.y = 64-40
                    }, completion: { (_) -> Void in
                        self.tipLabel.hidden = true
                })
        })

    }
     // MARK: - 通过viewmodel后去数据
    private func loadData(){
        //  开启菊花转

        homePage.getWeiBoDataArray(activityIndicator.isAnimating()){ (isSuccess, message) -> () in
          
          
            if !self.activityIndicator.isAnimating() {
            //  请求数据完成之后 开启tips动画,并显示刷新的微博的条数
            self.tipsAnimation(message)
            }
            //  结束下拉刷新
            self.endRefresh()
            if isSuccess {
                //获取数据成功,刷新UI
                self.tableView.reloadData()
                
            }
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return homePage.weiBoDataArrar.count
    }

    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomePageCellIdentifier, forIndexPath: indexPath) as! HRHomePageTableViewCell
        
        cell.homePageStatusViewModel = homePage.weiBoDataArrar[indexPath.row]
        cell.indexPath = indexPath//将indexpath传递给cell
        cell.selectionStyle = .None
        return cell
    }
    
     // MARK: - tableView代理方法
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        //  将要显示哪个cell的时候
        if indexPath.row == homePage.weiBoDataArrar.count - 1 && !activityIndicator.isAnimating(){
            //  开启菊花转
            activityIndicator.startAnimating()
            //  抓取数据,刷新UI
            loadData()
        }
    }
    

    
    //  有什么用?????????
//    override func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
////        if !activityIndicator.isAnimating() {
//            //  开启菊花转
//            activityIndicator.startAnimating()
//            //  抓取数据,刷新UI
//            loadData()
//
//    }

}
